/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.edu.upc.dew.proyecto.dao;
import java.util.List;
import pe.edu.upc.dew.proyecto.model.Servicio;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import pe.edu.upc.dew.proyecto.bd.Conexion;
import pe.edu.upc.dew.proyecto.model.ResultadoMedicoBean;
import pe.edu.upc.dew.proyecto.util.ConnUtil;

/**
 *
 * @author fxbautista
 */
public class ServicioDaoImpl implements ServicioDao {
    private PacienteDao pacienteDao;
    private MedicoDao medicoDao;
    private ServicioExamenDao servicioExamenDao;

    public List<Servicio> getServiciosPorPaciente(String numHistoria){
        List<Servicio> servicios = null;
        return servicios;
    }
    public List<Servicio> getServiciosPorMedico(int copersona){
        List<Servicio> servicios = null;


        return servicios;
    }
    public Servicio getServicioPorCodigo(int coServicio) {
        Servicio servicio = null;

        Connection connection = null;
        Statement st = null;
        ResultSet rsServicio = null;
        ResultSet rsservicioexamen = null;



        try{
            connection= Conexion.obtenerConexion();
            st = connection.createStatement();
            rsServicio = st.executeQuery(
                    "select * from servicio where coservicio ="
                    + Integer.toString(coServicio));
            if (rsServicio.next()){
                servicio = new Servicio();
                servicio.setCoServicio(coServicio);
                servicio.setFecha(rsServicio.getDate("Fecha"));


                servicio.setPaciente(
                        pacienteDao.getPacientePorCodigo(
                        rsServicio.getInt("copersona")) );

                servicio.setMedico(
                        medicoDao.getMedicoPorCodigo(
                        rsServicio.getInt("copermedico")));

                rsservicioexamen= st.executeQuery(
                        "select * from servicio_examen where coservicio ="
                        + Integer.toString(coServicio));


                while (rsservicioexamen.next()){
                    servicio.getListaServicioExamenes().add(
                            servicioExamenDao.getServicioExamenPorCodigo(
                            rsservicioexamen.getInt("idservexamen") ));
                }

            }
        }
        catch(Exception e){
        e.printStackTrace();
        }
        finally {
            Conexion.closeResultSet(rsServicio);
            Conexion.closeResultSet(rsservicioexamen);
            Conexion.closeStatement(st);
            Conexion.closeConnection(connection);
        }
        return servicio;
    }
    public Collection<ResultadoMedicoBean> seleccionarResultadosMedico(int codmedico) throws SQLException {
        Collection<ResultadoMedicoBean> resultados = new ArrayList<ResultadoMedicoBean>();
        ResultadoMedicoBean resultado = new ResultadoMedicoBean();
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            con = Conexion.obtenerConexion();
            ps = con.prepareStatement("select a.fecha, a.coservicio, d.nombre examen, " +
                    "c.apepaterno||' '||c.apematerno||' '||c.nombre1 nombrepac, " +
                    "e.direndisco||e.nombreimg rutaimagen, " +
                    "b.idservexamen idservexamen " +
                    "from servicio a, servicio_Examen b, examen d, persona c, imagen e " +
                    "where c.copersona    = a.copersona " +
                    "and e.idservexamen = b.idservexamen " +
                    "and d.coexamen     = b.coexamen " +
                    "and b.IDSERVEXAMEN = b.IDSERVEXAMEN " +
                    "and b.COSERVICIO   = a.COSERVICIO " +
                    "and a.COSERVICIO   = a.COSERVICIO " +
                    "and a.copermedico  = ?");
            ps.setInt(1, codmedico);
            //ps.setDate(2, new Date());
            rs = ps.executeQuery();
            while (rs.next()) {
                resultado = new ResultadoMedicoBean();
                resultado.setCoservicio(rs.getInt("coservicio"));
                resultado.setExamen(rs.getString("examen"));
                resultado.setFecha(rs.getDate("fecha"));
                resultado.setNombrepac(rs.getString("nombrepac"));
                resultado.setRutaimagen(rs.getString("rutaimagen"));
                resultado.setIdservexamen(rs.getInt("idservexamen"));
                resultados.add(resultado);
            }
        } finally {
            ConnUtil.close(ps, rs, con);
        }
        return resultados;
    }

    public Collection<ResultadoMedicoBean> seleccionarResultadosPaciente(int codpaciente) throws SQLException {
        Collection<ResultadoMedicoBean> resultados = new ArrayList<ResultadoMedicoBean>();
        ResultadoMedicoBean resultado = new ResultadoMedicoBean();
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            con = Conexion.obtenerConexion();
            ps = con.prepareStatement("select a.fecha, a.coservicio, d.nombre examen, " +
                    "c.apepaterno||' '||c.apematerno||' '||c.nombre1 nombremed, " +
                    "e.direndisco||e.nombreimg rutaimagen, " +
                    "b.idservexamen idservexamen " +
                    "from servicio a, servicio_Examen b, examen d, persona c, imagen e " +
                    "where c.copersona    = a.copermedico " +
                    "and e.idservexamen = b.idservexamen " +
                    "and d.coexamen     = b.coexamen " +
                    "and b.IDSERVEXAMEN = b.IDSERVEXAMEN " +
                    "and b.COSERVICIO   = a.COSERVICIO " +
                    "and a.COSERVICIO   = a.COSERVICIO " +
                    "and a.copersona    = ?");
            ps.setInt(1, codpaciente);
            //ps.setDate(2, new Date());
            rs = ps.executeQuery();
            while (rs.next()) {
                resultado = new ResultadoMedicoBean();
                resultado.setCoservicio(rs.getInt("coservicio"));
                resultado.setExamen(rs.getString("examen"));
                resultado.setFecha(rs.getDate("fecha"));
                resultado.setNombrepac(rs.getString("nombremed"));
                resultado.setRutaimagen(rs.getString("rutaimagen"));
                resultado.setIdservexamen(rs.getInt("idservexamen"));
                resultados.add(resultado);
            }
        }
        catch (Exception e){
            e.printStackTrace();
        }
        finally {
            ConnUtil.close(ps, rs, con);
        }
        return resultados;
    }
    public void setPacienteDao(PacienteDao pacientedao ){
        this.pacienteDao = pacientedao;
    }
    public void setMedicoDao(MedicoDao medicodao ){
        this.medicoDao = medicodao;
    }
    public void setServicioExamenDao(ServicioExamenDao servicioexamendao ){
        this.servicioExamenDao = servicioexamendao;
    }
}
